/*
 * @Author: 徐建辰
 * @Date: 2022-06-01 10:02:35
 * @LastEditTime: 2022-06-01 14:22:39
 * @LastEditors: 徐建辰
 * @Description: 上传文件前后处理（不是图片）
 */
import XLSX from 'xlsx'
import {formatDate} from './date'
import {USER_RELATIONS} from '@/utils/constant'

// 根据导入内容，生成数据
export function generateExcelData(isOnSucc, excelData) {
  isOnSucc && isOnSucc(excelData)
}

// 解析excel数据表头（固定处理方式）
export function getHeaderRow(sheet) {
  const headers = []
  const range = XLSX.utils.decode_range(sheet['!ref'])
  let C
  const R = range.s.r
  for (C = range.s.c; C <= range.e.c; ++C) {
    const cell = sheet[XLSX.utils.encode_cell({c: C, r: R})]
    let hdr = 'UNKNOWN ' + C
    if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
    headers.push(hdr)
  }

  return headers
}

// 解析excel上传的数据（异步）
export function resolveExcel(file, onSuccess) {
  return new Promise((resolve) => {
    // https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
    const reader = new FileReader()
    /* 读取数据完成时 */
    reader.onload = e => {
      // 获取到解析后的数据
      const data = e.target.result
      // 使用xlsx解析数据
      const workbook = XLSX.read(data, {type: 'array'})
      // 获取第一张表格名称
      const firstSheetName = workbook.SheetNames[0]
      // 读取sheet1（第一张表格）数据
      const workSheet = workbook.Sheets[firstSheetName]
      // 解析数据表头
      const header = getHeaderRow(workSheet)
      // 解析数据体
      const results = XLSX.utils.sheet_to_json(workSheet)
      // 传入解析后的数据
      generateExcelData(onSuccess, {header, results})
      // 处理loading
      // 成功回调
      resolve()
    }
    reader.readAsArrayBuffer(file)
  })
}

// 判断是否是excel类型文件，也可以通过获取文件后缀名来判断
export function checkFileType(file) {
  return /\.(xlsx|xls|csv)$/.test(file.name)
}

// 筛选数据，将其转换为后台识别的参数
export function screenResolveData(data) {
  const result = []
  data.forEach(item => {
    const userInfo = {}
    Object.keys(item).forEach(key => {
      if (USER_RELATIONS[key] === 'openTime') {
        userInfo[USER_RELATIONS[key]] = formatDate(item[key])
        return
      }
      userInfo[USER_RELATIONS[key]] = item[key]
    })
    result.push(userInfo)
  })
  return result
}